home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / Development Tools & Languages / • Other Platforms / PCCTS / testcpp / 10 / test.g < prev   
Encoding:
Text File  |  1994-09-14  |  2.0 KB  |  101 lines  |  [TEXT/MPS ]

  1. /* This tests a simple DLG-based scanner plus (...)? predicates */
  2.  
  3. <<
  4. class ANTLRToken : public ANTLRCommonToken {
  5.     virtual ANTLRLightweightToken *makeToken(TokenType tt, ANTLRChar *txt, int line)
  6.         {
  7.             ANTLRToken *t = new ANTLRToken;
  8.             t->setType(tt); t->setText(txt); t->setLine(line);
  9.             return t;
  10.         }
  11. };
  12.  
  13. /* We could have used ANTLRCommonBacktrackingToken here; i.e.,
  14. typedef ANTLRCommonBacktrackingToken ANTLRToken;
  15. */
  16.  
  17. #include "DLGLexer.h"
  18.  
  19. main()
  20. {
  21.     DLGFileInput in(stdin);
  22.     DLGLexer scan(&in,2000);
  23.     ANTLRTokenBuffer pipe(&scan, 3, 30);
  24.     ANTLRToken aToken;
  25.     scan.setToken(&aToken);
  26.     Expr parser(&pipe);
  27.     parser.init();
  28.  
  29.     parser.begin();
  30. }
  31.  
  32. void doit(Expr *p)
  33. {
  34.     printf("LT(1) is %s\n", ((ANTLRToken *)p->LT(1))->getText());
  35.     printf("LT(2) is %s\n", ((ANTLRToken *)p->LT(2))->getText());
  36.     printf("LT(3) is %s\n", ((ANTLRToken *)p->LT(3))->getText());
  37.     printf("LT(4) is %s\n", ((ANTLRToken *)p->LT(4))->getText());
  38.     printf("LT(5) is %s\n", ((ANTLRToken *)p->LT(5))->getText());
  39.     printf("LT(6) is %s\n", ((ANTLRToken *)p->LT(6))->getText());
  40.     printf("LT(7) is %s\n", ((ANTLRToken *)p->LT(7))->getText());
  41.     printf("LT(8) is %s\n", ((ANTLRToken *)p->LT(8))->getText());
  42.     printf("LT(9) is %s\n", ((ANTLRToken *)p->LT(9))->getText());
  43.     printf("LT(10) is %s\n", ((ANTLRToken *)p->LT(10))->getText());
  44.     printf("LT(11) is %s\n", ((ANTLRToken *)p->LT(11))->getText());
  45. }
  46. >>
  47.  
  48. #token "[\ \t\n]+"    <<skip();>>
  49. #token Eof "@"
  50.  
  51. class Expr {                /* Define a grammar class */
  52.  
  53. begin
  54.     :    <</*doit(this);*/>> 
  55.         e
  56.     ;
  57.  
  58. e    :    ( list "=" )?  list "=" list Eof
  59.         <<printf("list = list\n");>>
  60.     |    list Eof
  61.         <<printf("list\n");>>
  62.     ;
  63.  
  64. list:    "\(" (IDENTIFIER|NUMBER)* "\)"
  65.     ;
  66.  
  67. predict
  68.     :    ( "\(" (IDENTIFIER|NUMBER)* "\)" "=")?
  69.     |    "\(" "\)" "="
  70.     ;
  71.  
  72. /*
  73. #token INT "int"
  74. #token SEMI ";"
  75. #token STAR "\*"
  76. #token ASSIGN "="
  77.  
  78. begin:  "extern" "char" declarator ";"
  79.     ;
  80.  
  81. e    :    (decl)?
  82.     |    expr
  83.     ;
  84.  
  85. expr:    IDENTIFIER "=" NUMBER
  86.     ;
  87.  
  88. decl:    "int" declarator ";"
  89.     ;
  90.  
  91. declarator
  92.     :    ( "\*" )? "\*" declarator
  93.     |    IDENTIFIER
  94.     ;
  95. */
  96.  
  97. }
  98.  
  99. #token IDENTIFIER    "[a-z]+"
  100. #token NUMBER        "[0-9]+"
  101.